const configService = require('./src/services/configService');

async function testConfigService() {
  try {
    console.log('🧪 开始测试配置服务...\n');

    // 测试获取单个配置
    console.log('1. 测试获取单个配置:');
    const dbHost = await configService.getConfig('DB_HOST');
    console.log(`   DB_HOST: ${dbHost}`);

    const jwtSecret = await configService.getConfig('JWT_SECRET');
    console.log(`   JWT_SECRET: ${jwtSecret ? '已设置' : '未设置'}`);

    // 测试获取多个配置
    console.log('\n2. 测试获取多个配置:');
    const dbConfig = await configService.getConfigs(['DB_HOST', 'DB_PORT', 'DB_USER', 'DB_NAME']);
    console.log('   数据库配置:', dbConfig);

    // 测试获取分类配置
    console.log('\n3. 测试获取分类配置:');
    const allConfigs = await configService.getAllConfigs();
    console.log('   配置分类:', Object.keys(allConfigs));

    // 测试获取特定分类
    console.log('\n4. 测试获取数据库分类配置:');
    const dbConfigs = allConfigs.database || {};
    console.log('   数据库配置项:', Object.keys(dbConfigs));

    // 测试JWT配置
    console.log('\n5. 测试JWT配置:');
    const jwtConfig = await configService.getJWTConfig();
    console.log('   JWT配置:', {
      secret: jwtConfig.secret ? '已设置' : '未设置',
      expiresIn: jwtConfig.expiresIn,
      bcryptRounds: jwtConfig.bcryptRounds
    });

    // 测试邮箱配置
    console.log('\n6. 测试邮箱配置:');
    const emailConfig = await configService.getEmailConfig();
    console.log('   邮箱配置:', {
      host: emailConfig.host,
      port: emailConfig.port,
      user: emailConfig.user,
      from: emailConfig.from
    });

    // 测试AI配置
    console.log('\n7. 测试AI配置:');
    const aiConfig = await configService.getAIConfig();
    console.log('   AI配置:', {
      apiKey: aiConfig.apiKey ? '已设置' : '未设置',
      model: aiConfig.model
    });

    // 测试更新配置
    console.log('\n8. 测试更新配置:');
    const testKey = 'TEST_CONFIG';
    const testValue = 'test_value_' + Date.now();
    await configService.updateConfig(testKey, testValue, 'string');
    console.log(`   已更新 ${testKey} = ${testValue}`);

    // 验证更新
    const updatedValue = await configService.getConfig(testKey);
    console.log(`   验证更新: ${testKey} = ${updatedValue}`);

    // 测试配置状态
    console.log('\n9. 测试配置状态:');
    const status = {
      configCount: configService.configCache.size,
      lastUpdate: new Date(configService.lastCacheUpdate).toISOString(),
      cacheAge: Math.floor((Date.now() - configService.lastCacheUpdate) / 1000)
    };
    console.log('   配置状态:', status);

    console.log('\n✅ 配置服务测试完成！');

  } catch (error) {
    console.error('❌ 配置服务测试失败:', error);
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  require('dotenv').config();
  testConfigService()
    .then(() => {
      console.log('\n🎉 测试完成');
      process.exit(0);
    })
    .catch((error) => {
      console.error('测试失败:', error);
      process.exit(1);
    });
}

module.exports = { testConfigService };
